/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package co.gov.igac.observatorio.entidades.idea;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.validation.constraints.Size;
import org.hibernate.validator.constraints.NotBlank;

/**
 *
 * @author jgamba
 */
@Entity
@Table(name = "proyecto")
@NamedQueries({
    @NamedQuery(name = "Proyecto.findAll", query = "SELECT p FROM Proyecto p"),
    @NamedQuery(name = "Proyecto.findByIdProyecto", query = "SELECT p FROM Proyecto p WHERE p.idProyecto = :idProyecto"),
    @NamedQuery(name = "Proyecto.findByNombre", query = "SELECT p FROM Proyecto p WHERE p.nombre = :nombre"),
    @NamedQuery(name = "Proyecto.findByAbstract1", query = "SELECT p FROM Proyecto p WHERE p.abstract1 = :abstract1"),
    @NamedQuery(name = "Proyecto.findByMetodologia", query = "SELECT p FROM Proyecto p WHERE p.metodologia = :metodologia"),
    @NamedQuery(name = "Proyecto.findByResultados", query = "SELECT p FROM Proyecto p WHERE p.resultados = :resultados"),
    @NamedQuery(name = "Proyecto.findByConclusiones", query = "SELECT p FROM Proyecto p WHERE p.conclusiones = :conclusiones"),
    @NamedQuery(name = "Proyecto.findByFechaInicio", query = "SELECT p FROM Proyecto p WHERE p.fechaInicio = :fechaInicio"),
    @NamedQuery(name = "Proyecto.findByFechaFin", query = "SELECT p FROM Proyecto p WHERE p.fechaFin = :fechaFin"),
    @NamedQuery(name = "Proyecto.findByLider", query = "SELECT p FROM Proyecto p WHERE p.lider = :lider"),
    @NamedQuery(name = "Proyecto.findByPaginaWeb", query = "SELECT p FROM Proyecto p WHERE p.paginaWeb = :paginaWeb")})
public class Proyecto implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "idProyecto")
    private Integer idProyecto;
    @NotBlank(message = "Se requiere el nombre")
    @Size(max = 1000, message = "El nombre debe tener una longitud máxima de 1000 caracteres")
    @Column(name = "nombre")
    private String nombre;
    @Size(max = 5000, message = "El resumen debe tener una longitud máxima de 5000 caracteres")
    @Column(name = "abstract")
    private String abstract1;
    @Size(max = 5000, message = "La metodología debe tener una longitud máxima de 5000 caracteres")
    @Column(name = "metodologia")
    private String metodologia;
    @Size(max = 5000, message = "Los resultados deben tener una longitud máxima de 5000 caracteres")
    @Column(name = "resultados")
    private String resultados;
    @Size(max = 5000, message = "Las conclusiones deben tener una longitud máxima de 5000 caracteres")
    @Column(name = "conclusiones")
    private String conclusiones;
    @Column(name = "fechaInicio")
    @Temporal(TemporalType.DATE)
    private Date fechaInicio;
    @Column(name = "fechaFin")
    @Temporal(TemporalType.DATE)
    private Date fechaFin;
    @Size(max = 1000, message = "El líder debe tener una longitud máxima de 1000 caracteres")
    @Column(name = "lider")
    private String lider;
    @Size(max = 1000, message = "La página web debe tener una longitud máxima de 1000 caracteres")
    @Column(name = "paginaWeb")
    private String paginaWeb;
    @JoinColumn(name = "Cobertura_idCobertura", referencedColumnName = "idCobertura")
    @ManyToOne
    private Cobertura cobertura;
    @JoinColumn(name = "Municipio_idMunicipio", referencedColumnName = "idMunicipio")
    @ManyToOne
    private Municipio municipio;
    @JoinColumn(name = "Departamento_idDepartamento", referencedColumnName = "idDepartamento")
    @ManyToOne
    private Departamento departamento;
    @JoinColumn(name = "Pais_idPais", referencedColumnName = "idPais")
    @ManyToOne
    private Pais pais;
    @JoinColumn(name = "Subarea2_idSubarea2", referencedColumnName = "idSubarea2")
    @ManyToOne
    private Subarea2 subarea2;
    @JoinColumn(name = "SubArea1_idSubArea1", referencedColumnName = "idSubArea1")
    @ManyToOne
    private Subarea1 subarea1;
    @JoinColumn(name = "SubArea_idSubArea", referencedColumnName = "idSubArea")
    @ManyToOne
    private Subarea subarea;
    @JoinColumn(name = "AreaInvestigacion_idAreaInvestigacion", referencedColumnName = "idAreaInvestigacion")
    @ManyToOne
    private Areainvestigacion areainvestigacion;
    @JoinColumn(name = "Entidad_idEntidad", referencedColumnName = "idEntidad")
    @ManyToOne
    private Entidad entidad;
    @JoinColumn(name = "Investigador_idInvestigador", referencedColumnName = "idInvestigador")
    @ManyToOne
    private Investigador investigador;
    @OneToMany(mappedBy = "proyecto", cascade = {CascadeType.PERSIST})
    private List<Documentacion> documentacionList;

    public Proyecto() {
    }

    public Proyecto(Integer idProyecto) {
        this.idProyecto = idProyecto;
    }

    public Integer getIdProyecto() {
        return idProyecto;
    }

    public void setIdProyecto(Integer idProyecto) {
        this.idProyecto = idProyecto;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getAbstract1() {
        return abstract1;
    }

    public void setAbstract1(String abstract1) {
        this.abstract1 = abstract1;
    }

    public String getMetodologia() {
        return metodologia;
    }

    public void setMetodologia(String metodologia) {
        this.metodologia = metodologia;
    }

    public String getResultados() {
        return resultados;
    }

    public void setResultados(String resultados) {
        this.resultados = resultados;
    }

    public String getConclusiones() {
        return conclusiones;
    }

    public void setConclusiones(String conclusiones) {
        this.conclusiones = conclusiones;
    }

    public Date getFechaInicio() {
        return fechaInicio;
    }

    public void setFechaInicio(Date fechaInicio) {
        this.fechaInicio = fechaInicio;
    }

    public Date getFechaFin() {
        return fechaFin;
    }

    public void setFechaFin(Date fechaFin) {
        this.fechaFin = fechaFin;
    }

    public String getLider() {
        return lider;
    }

    public void setLider(String lider) {
        this.lider = lider;
    }

    public String getPaginaWeb() {
        return paginaWeb;
    }

    public void setPaginaWeb(String paginaWeb) {
        this.paginaWeb = paginaWeb;
    }

    public Cobertura getCobertura() {
        return cobertura;
    }

    public void setCobertura(Cobertura cobertura) {
        this.cobertura = cobertura;
    }

    public Municipio getMunicipio() {
        return municipio;
    }

    public void setMunicipio(Municipio municipio) {
        this.municipio = municipio;
    }

    public Departamento getDepartamento() {
        return departamento;
    }

    public void setDepartamento(Departamento departamento) {
        this.departamento = departamento;
    }

    public Pais getPais() {
        return pais;
    }

    public void setPais(Pais pais) {
        this.pais = pais;
    }

    public Subarea2 getSubarea2() {
        return subarea2;
    }

    public void setSubarea2(Subarea2 subarea2) {
        this.subarea2 = subarea2;
    }

    public Subarea1 getSubarea1() {
        return subarea1;
    }

    public void setSubarea1(Subarea1 subarea1) {
        this.subarea1 = subarea1;
    }

    public Subarea getSubarea() {
        return subarea;
    }

    public void setSubarea(Subarea subarea) {
        this.subarea = subarea;
    }

    public Areainvestigacion getAreainvestigacion() {
        return areainvestigacion;
    }

    public void setAreainvestigacion(Areainvestigacion areainvestigacion) {
        this.areainvestigacion = areainvestigacion;
    }

    public Entidad getEntidad() {
        return entidad;
    }

    public void setEntidad(Entidad entidad) {
        this.entidad = entidad;
    }

    public Investigador getInvestigador() {
        return investigador;
    }

    public void setInvestigador(Investigador investigador) {
        this.investigador = investigador;
    }

    public List<Documentacion> getDocumentacionList() {
        return documentacionList;
    }

    public void setDocumentacionList(List<Documentacion> documentacionList) {
        this.documentacionList = documentacionList;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idProyecto != null ? idProyecto.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Proyecto)) {
            return false;
        }
        Proyecto other = (Proyecto) object;
        if ((this.idProyecto == null && other.idProyecto != null) || (this.idProyecto != null && !this.idProyecto.equals(other.idProyecto))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "co.gov.igac.observatorio.entidades.idea.Proyecto[ idProyecto=" + idProyecto + " ]";
    }
}
